Memory devices are typically provided as internal, semiconductor, integrated circuits in computers or other electronic devices. There are many different types of memory including random-access memory (RAM), read only memory (ROM), dynamic random access memory (DRAM), synchronous dynamic random access memory (SDRAM), and flash memory, among others.
Flash memory devices are utilized as non-volatile memory for a wide range of electronic applications. Flash memory devices typically use a one-transistor memory cell that allows for high memory densities, high reliability, and low power consumption.
Uses for flash memory include memory for personal computers, personal digital assistants (PDAs), digital cameras, and cellular telephones. Program code and system data, such as a basic input/output system (BIOS), are typically stored in flash memory devices. This information can be used in personal computer systems, among others.
Two common types of flash memory array architectures are the “NAND” and “NOR” architectures, so called for the logical form in which the basic memory cell configuration of each is arranged. In the NOR array architecture, the floating gate memory cells of the memory array are typically arranged in a matrix.
The gates of each floating gate memory cell of the array matrix are typically coupled by rows to word lines and their drains are coupled to column bit lines. The NOR architecture floating gate memory array is accessed by a row decoder activating a row of floating gate memory cells by selecting the word line coupled to their gates. The row of selected memory cells then place their data values on the column bit lines by flowing different currents depending on if a particular cell is in a programmed state or an erased state.
A NAND array architecture also arranges its array of floating gate memory cells in a matrix such that the gates of each floating gate memory cell of the array are coupled by rows to word lines. However each memory cell is not directly coupled to a column bit line by its drain. Instead, the memory cells of the array are coupled together in series, source to drain, between a source line and a column bit line.
Memory cells in a NAND array architecture can be programmed to a desired state. For example, electric charge can be placed on or removed from the floating gate of a memory cell to put the cell into a number of data states. For example, a single level cell (SLC) can represent two binary states, e.g., 1 or 0. Flash memory cells can also store more than two binary states, e.g., 00, 01, 10, or 11. Such cells may be referred to as multi state memory cells, multibit cells, or multilevel cells (MLCs). MLCs can allow the manufacture of higher density memories without increasing the number of memory cells since each cell can represent more than one bit. MLCs can have more than one programmed state, e.g., a cell capable of representing two bits can have three programmed states and an erased state.
Reading of memory cells can be accomplished by applying an appropriate voltage to the control gate and the drain and comparing the drain to source current, which can indicate the voltage threshold (Vt) of the cell, against a reference current, e.g., a “trip point,” to determine the state of the memory cell. In an example data read operation, e.g., 0 volts can be applied to a selected word line, e.g., to the control gate of a cell or cells in the selected word line. A read pass voltage, e.g., 5 volts, can be applied to unselected word lines, e.g., to the control gates of cells in the unselected word lines. The drain to source current, e.g., the “cell current,” or “drain current,” flowing through cells on the selected word line, is indicative of the binary logic state of the cell.
As such, when the cell current of a particular memory cell is above the trip point, the memory cell is read as having a particular state, e.g., an erased state or a programmed state. When the cell current of the particular memory cell is below the trip point, the memory cell is read as having a different state. Therefore, a desired configured state of the memory cell, e.g., 00, 01, 10, or 11, depends on whether the cell current is above or below the trip point.
Memory cells having a state other than their desired/expected configured state, e.g., the state into which they were programmed, represent data errors in data being read. Many memory devices and/or systems employ an error checking technique such as error correction code (ECC) checking to detect bit errors in data, e.g., cells having incorrect states. The error correction codes can be associated with groups of cells, e.g., memory blocks, memory segments, or memory sectors, and can reduce read failures by detecting and possibly correcting bit errors. Examples of error correction codes include, Hamming codes, Reed-Solomon (RS) codes, Bose-Chaudhuri-Hochquenghem (BCH) codes, circular redundancy check (CRC) codes, Golay codes, Reed-Muller codes, Goppa codes, and Denniston codes, among others.
Read failures occur when accessed data bits, e.g., memory cells representing information retrieved by a processor, have incorrect states. Reducing read failures increases the operational reliability of memory devices and/or systems. Error checking/correcting techniques may not be able to correct more than a certain number of erroneous bits. Furthermore, many error checking techniques may not even be able to detect more than a particular number of erroneous bits for a given group of cells, e.g., a data word or data sector.
Therefore, the read failure rate increases as the number of memory cells having incorrect states increases. The state of a memory cell can be incorrect for several reasons. For example, floating gate to floating gate interference from adjacent cells can shift the Vt of a memory cell, which can in turn result in a modified cell current. This cell current modification can cause the cell to switch from a correct state to an incorrect state. The Vt shifts and associated cell current shifts caused by interference can have a greater effect on a cell programmed to the erased state when adjacent cells are programmed to higher data states. Vt shifts and cell current modification affect greater numbers of cells as cell read margins are reduced as scaling of memory devices shrinks in dimension, etc.